<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>PL/SQL</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="../_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/PL%2FSQL"> <link href="../_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="../_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="../_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="../_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="../_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="../_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="../_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="../_res_/footer.css">
<link rel="stylesheet" type="text/css" href="../_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-PL_SQL rootpage-PL_SQL skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">PL/SQL</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr"><div class="infobox_v3 infobox infobox--frwiki noarchive" style="width:260px">
<div class="entete icon informatique" style="color: #000000;"><style data-mw-deduplicate="TemplateStyles:r228712691">
/* start https://fr.wikipedia.org/ */
.mw-parser-output .entete.informatique{background-image:url("../_mw_/Picto.nfo.png")}
/* end https://fr.wikipedia.org/ */
</style>
<div>PL/SQL</div>
</div>
<p class="mw-empty-elt">
</p>
<table><caption style="color:#000000;">Informations</caption>
<tbody><tr>
<th scope="row"><a href="../D%C3%A9veloppeur" title="Développeur">Développé par</a></th>
<td>
<a href="../Oracle_Database" title="Oracle Database">Oracle</a></td>
</tr>
<tr>
<th scope="row"> <a href="../Version_d'un_logiciel" title="Version d'un logiciel">Première version</a>
</th>
<td>
<time>1991</time></td>
</tr>
<tr>
<th scope="row"> <a href="../Version_d'un_logiciel" title="Version d'un logiciel">Dernière version</a>
</th>
<td>
19.2.1 (<time>2019</time>)</td>
</tr>
<tr>
<th scope="row"><a href="../Plateforme_informatique" title="Plateforme informatique">Environnement</a></th>
<td>
<a href="../Multiplate-forme" class="mw-redirect" title="Multiplate-forme">Multiplate-forme</a></td>
</tr>
<tr>
<th scope="row"><a href="../Format_de_donn%C3%A9es" title="Format de données">Formats</a> lus</th>
<td>
<span class="wd_p1072">PL/SQL source file <small>(<a href="https://www.wikidata.org/wiki/Q132640072" class="extiw external" title="d:Q132640072"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small>, PL/SQL binary <small>(<a href="https://www.wikidata.org/wiki/Q132640155" class="extiw external" title="d:Q132640155"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small>, Package source file <small>(<a href="https://www.wikidata.org/wiki/Q132641321" class="extiw external" title="d:Q132641321"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small>, Package binary file <small>(<a href="https://www.wikidata.org/wiki/Q132641461" class="extiw external" title="d:Q132641461"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small> et Combined package specification plus body file <small>(<a href="https://www.wikidata.org/wiki/Q132641591" class="extiw external" title="d:Q132641591"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small></span></td>
</tr>
<tr>
<th scope="row"><a href="../Format_de_donn%C3%A9es" title="Format de données">Formats</a> écrits</th>
<td>
<span class="wd_p1073">PL/SQL source file <small>(<a href="https://www.wikidata.org/wiki/Q132640072" class="extiw external" title="d:Q132640072"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small>, PL/SQL binary <small>(<a href="https://www.wikidata.org/wiki/Q132640155" class="extiw external" title="d:Q132640155"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small>, Package source file <small>(<a href="https://www.wikidata.org/wiki/Q132641321" class="extiw external" title="d:Q132641321"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small>, Package binary file <small>(<a href="https://www.wikidata.org/wiki/Q132641461" class="extiw external" title="d:Q132641461"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small> et Combined package specification plus body file <small>(<a href="https://www.wikidata.org/wiki/Q132641591" class="extiw external" title="d:Q132641591"><span class="indicateur-langue" title="Voir l'élément Wikidata correspondant">d</span></a>)</small></span></td>
</tr>
<tr>
<th scope="row"> Type
</th>
<td>
<a href="../Langage_de_requ%C3%AAte" title="Langage de requête">Langage de requête</a></td>
</tr>
<tr>
<th scope="row"><a href="../Licence_de_logiciel" title="Licence de logiciel">Licence</a></th>
<td>
<a href="../Logiciel_propri%C3%A9taire" title="Logiciel propriétaire">propriétaire</a></td>
</tr>
<tr>
<th scope="row"><a href="../Site_web" title="Site web">Site web</a></th>
<td>
<a rel="nofollow" class="external text" href="https://docs.oracle.com/cd/B10501_01/index.htm">oracle.com</a></td>
</tr>
</tbody></table>
<p class="mw-empty-elt">
</p>
</div>
<p><b>PL/SQL</b> (<a href="../Sigle" title="Sigle">sigle</a> de <i><b>Procedural Language / Structured Query Language</b></i>) est un <a href="../Langage_de_programmation" title="Langage de programmation">langage</a> fondé sur les paradigmes de programmation <a href="../Programmation_proc%C3%A9durale" title="Programmation procédurale">procédurale</a> et <a href="../Programmation_structur%C3%A9e" title="Programmation structurée">structurée</a>. Il est <a href="../Logiciel_propri%C3%A9taire" title="Logiciel propriétaire">propriétaire</a>, créé par <a href="../Oracle_Database" title="Oracle Database">Oracle</a> et utilisé dans le cadre de <a href="../Base_de_donn%C3%A9es_relationnelle" title="Base de données relationnelle">bases de données relationnelles</a>. Sa syntaxe générale ressemble à celle des <a href="../Langage_de_programmation" title="Langage de programmation">langages</a> <a href="../Pascal_(langage)" title="Pascal (langage)">Pascal</a> et <a href="../Ada_(langage)" title="Ada (langage)">Ada</a>.
</p><p>PL/SQL est disponible dans Oracle Database (depuis la version 7), TimesTen In-Memory Database (depuis la version 11.2.1) et <a href="../IBM_DB2" class="mw-redirect" title="IBM DB2">IBM DB2</a> (depuis la version 9.7).
</p><p>Il permet de combiner des requêtes <a href="../Structured_Query_Language" title="Structured Query Language">SQL</a> et des instructions procédurales (boucles, conditions...), dans le but de créer des traitements complexes destinés à être stockés sur le serveur de base de données (objets serveur), comme des <a href="../Proc%C3%A9dure_stock%C3%A9e" title="Procédure stockée">procédures stockées</a> ou des <a href="../D%C3%A9clencheur" title="Déclencheur">déclencheurs</a>.
</p><p>Les dernières évolutions proposées par Oracle reposent sur un moteur permettant de créer et gérer des <a href="../Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">objets</a> contenant des méthodes et des propriétés.
</p><p>À l'origine, PL/SQL est un <a href="../Langage_interpr%C3%A9t%C3%A9" class="mw-redirect" title="Langage interprété">langage interprété</a>, mais depuis la version 9i RC1, le code peut être compilé en <a href="../Langage_machine" title="Langage machine">code machine</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>. Dans la version 9i d'Oracle database, le code est converti en <a href="../C_(langage)" title="C (langage)">C</a> puis doit être compilé en <a href="../Biblioth%C3%A8que_logicielle" title="Bibliothèque logicielle">bibliothèques partagées</a> (<a href="../Dynamic_Link_Library" title="Dynamic Link Library">DLL</a> sous Windows) ; dans la version 10g le code machine est stocké dans le catalogue<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> et depuis la version 11g il est stocké dans le <a href="../Tablespace" title="Tablespace">tablespace</a> système après compilation directe<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Comparaison_avec_les_autres_bases_de_données"><span id="Comparaison_avec_les_autres_bases_de_donn.C3.A9es"></span>Comparaison avec les autres bases de données</h2></div>
<p><a href="../MySQL" title="MySQL">MySQL</a> et Mimer SQL proposent un langage analogue dans le principe mais plus limité, le SQL/PSM de la norme SQL:2003, et plusieurs <a href="../SGBD" class="mw-redirect" title="SGBD">SGBD</a> en utilisent un dérivé (IBM DB2 avec SQL-PL, <a href="../PostgreSQL" title="PostgreSQL">PostgreSQL</a> avec <a href="../PL/pgSQL" title="PL/pgSQL">PL/pgSQL</a> et PL/pgPSM). Quant à <a href="../Microsoft" title="Microsoft">Microsoft</a> et <a href="../Sybase" title="Sybase">Sybase</a>, ils utilisent un concurrent développé par <a href="../Sybase" title="Sybase">Sybase</a>, le <a href="../T-SQL" class="mw-redirect" title="T-SQL">Transact-SQL (T-SQL)</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Concepts">Concepts</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Blocs">Blocs</h3></div>
<p>Tout programme PL/SQL doit se présenter sous forme de blocs. Voici la forme générale d'un bloc.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="o"><<</span><span class="n">label</span><span class="o">>></span><span class="w"> </span><span class="c1">-- Optionnel</span>
<span class="k">DECLARE</span><span class="w"> </span><span class="c1">-- Section optionnelle</span>
<span class="n">déclarations</span>
<span class="k">BEGIN</span><span class="w"> </span><span class="c1">-- Section obligatoire, doit contenir au moins une instruction exécutable</span>
<span class="n">implémentation</span>
<span class="k">EXCEPTION</span><span class="w"> </span><span class="c1">-- Section optionnelle</span>
<span class="n">gestion</span><span class="w"> </span><span class="n">des</span><span class="w"> </span><span class="n">exceptions</span>
<span class="k">END</span><span class="p">;</span>
</pre></div>
<p>Un bloc PL/SQL comprend d'abord une partie dédiée à la définition de toutes les variables employées dans le bloc. Elle commence par l'instruction <i>DECLARE</i> et est facultative. La section principale commence avec l'instruction <i>BEGIN</i>. Elle contient les instructions du programme. Si une variable est utilisée dans cette section alors qu'elle n'a pas été déclarée dans la section de déclaration, le <a href="../Compilateur" title="Compilateur">compilateur</a> générera une erreur. Enfin, la dernière section est appelée en cas d'erreur dans la section précédente. Elle commence par l'instruction <i>EXCEPTION</i> et on y traite l'ensemble des exceptions levées dans la section principale.
</p>
<div class="mw-heading mw-heading3"><h3 id="Structure_du_code">Structure du code</h3></div>
<p>PL/SQL permet de grouper les instructions dans des <a href="../Proc%C3%A9dure_(informatique)" class="mw-redirect" title="Procédure (informatique)">procédures</a> et des <a href="../Fonction_(informatique)" class="mw-redirect" title="Fonction (informatique)">fonctions</a>, ces termes ont la même signification qu'en <a href="../Pascal_(langage)" title="Pascal (langage)">Pascal</a> : une <b>fonction</b> est un bloc de code prenant des paramètres et qui effectue des traitements pour obtenir un résultat retourné, une <b>procédure</b> recouvre la même notion sauf qu'une procédure ne retourne pas de résultat. Les <a href="../Param%C3%A8tre_(programmation_informatique)" title="Paramètre (programmation informatique)">arguments</a> passés aux procédures et fonctions peuvent être donnés en lecture seule (<i>IN</i>), en écriture (<i>OUT</i>) ou en lecture-écriture (<i>IN OUT</i>) ; le développeur peut également choisir le passage par valeur (comportement normal) ou par référence (<i>NO COPY</i>).
</p><p>Des fonctions et procédures peuvent être regroupées dans des unités nommées <b>paquetages</b>, elles sont alors accessibles sous le même espace de noms. D'une manière similaire aux modules de Pascal, la création d'un paquetage requiert l'écriture d'une spécification exposant le prototype des fonctions et procédures du paquetage, ainsi que des variables et <a href="../Type_(informatique)" title="Type (informatique)">types</a> publics. En second lieu, l'implémentation du paquetage est faite séparément ; elle contient le code des procédures et fonctions ainsi que la déclaration d'éléments privés.
</p><p>La version 8i a introduit le concept d'<a href="../Objet_(informatique)" title="Objet (informatique)">objet</a> et les implémentations depuis la version 9i supportent la <a href="../Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">programmation orientée-objet</a> avec notamment l'<a href="../H%C3%A9ritage_(informatique)" title="Héritage (informatique)">héritage</a>. Une <a href="../Classe_(informatique)" title="Classe (informatique)">classe</a> PL/SQL est décrite comme un type. Elle a une structure analogue à celle d'un package PL/SQL : d'abord la déclaration des méthodes, ensuite leur implémentation dans le <i>body</i>.
</p>
<div class="mw-heading mw-heading3"><h3 id="Variables">Variables</h3></div>
<p>Les premiers types de variables à disposition sont les types SQL supportés par le serveur Oracle (<i>INTEGER</i>, <i>VARCHAR</i>...), mais il est possible de définir des types personnalisés.
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><a rel="nofollow" class="external free" href="http://www.dbspecialists.com/files/presentations/native_plsql.html">http://www.dbspecialists.com/files/presentations/native_plsql.html</a> <span class="noarchive">« <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180722215923/http://www.dbspecialists.com/files/presentations/native_plsql.html">Copie archivée</a> »</span> <small>(version du <time class="nowrap" datetime="2018-07-22" data-sort-value="2018-07-22">22 juillet 2018</time> sur <i><a href="../Internet_Archive" title="Internet Archive">Internet Archive</a></i>)</small></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><span class="ouvrage"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> « <a rel="nofollow" class="external text" href="https://www.scribd.com/doc/16654335/Plsql-New-in-11gr1"><cite style="font-style:normal;" lang="en">Plsql New in 11gr1</cite></a> », sur <span class="italique">Scribd</span> <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2020-09-24" data-sort-value="2020-09-24">24 septembre 2020</time>)</small></span>.</span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a> </span><span class="reference-text"><span class="ouvrage"><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> « <a rel="nofollow" class="external text" href="https://swervedba.wordpress.com/2011/07/"><cite style="font-style:normal;" lang="en">July 2011 – TwelveC</cite></a> », sur <span class="italique">TwelveC</span> <small style="line-height:1em;">(consulté le <time class="nowrap" datetime="2023-03-22" data-sort-value="2023-03-22">22 mars 2023</time>)</small></span>.</span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading3"><h3 id="Articles_connexes">Articles connexes</h3></div>
<ul><li><a href="../Base_de_donn%C3%A9es_relationnelle" title="Base de données relationnelle">Base de données relationnelle</a></li>
<li><a href="../Syst%C3%A8me_de_gestion_de_base_de_donn%C3%A9es" title="Système de gestion de base de données">Système de gestion de base de données</a></li>
<li><a href="../Structured_Query_Language" title="Structured Query Language">Structured Query Language</a>
<ul><li><a href="../PL/pgSQL" title="PL/pgSQL">PL/pgSQL (PostgreSQL)</a></li>
<li><a href="../Transact-SQL" title="Transact-SQL">Transact-SQL</a></li></ul></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<style data-mw-deduplicate="TemplateStyles:r194021218">
/* start https://fr.wikipedia.org/ */
.mw-parser-output .autres-projets>.titre{text-align:center;margin:0.2em 0}.mw-parser-output .autres-projets>ul{margin:0;padding:0}.mw-parser-output .autres-projets>ul>li{list-style:none;margin:0.2em 0;text-indent:0;padding-left:24px;min-height:20px;text-align:left;display:block}.mw-parser-output .autres-projets>ul>li>a{font-style:italic}@media(max-width:720px){.mw-parser-output .autres-projets{float:none}}
/* end https://fr.wikipedia.org/ */
</style>
<ul><li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="https://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/toc.htm">PL/SQL User's Guide and Reference</a></li></ul>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail des bases de données</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-10-21" href="https://fr.wikipedia.org/wiki/?title=PL%2FSQL&oldid=229944787">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="../_webp_/webpHandler.js"></script>
</body></html>